package ar.com.seminario.model;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.Table;

import ar.com.seminario.common.domain.entity.Identifiable;
import ar.com.seminario.model.enumerados.GrupoPerfil;

/**
 * Detalla a un perfil de un candidato.
 * 
 * @author Pablo Lamas
 * 
 */
@Entity
@Table(name = "detalle_perfil")
public class DetallePerfil implements Identifiable<Long> {

	/**
	 * Identificador de la entidad.
	 */
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name = "id", nullable = false)
	private Long id;

	/**
	 * Valor del detalle.
	 */
	@Column(name = "valor", nullable = false)
	private Integer valor;

	/**
	 * Descripcion del detalle.
	 */
	@Column(name = "descripcion", nullable = false)
	private String descripcion;

	/**
	 * Indica si es obligatorio.
	 */
	@Column(name = "es_obligatorio", nullable = false)
	private Boolean esObligatorio;

	/**
	 * Ponderacion del detalle.
	 */
	@OneToOne(mappedBy = "detallePerfil", fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
	private Ponderacion ponderacion;

	/**
	 * Grupo al que pertenece el perfil
	 */
	@Column(name = "grupo_perfil_id", nullable = false)
	private Long grupoPerfilId;

	/**
	 * Constructor por defecto.
	 */
	public DetallePerfil() {

	}

	public Long getId() {
		return id;
	}

	protected void setId(Long id) {
		this.id = id;
	}

	public Integer getValor() {
		return valor;
	}

	public void setValor(Integer valor) {
		this.valor = valor;
	}

	public String getDescripcion() {
		return descripcion;
	}

	public void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}

	public Boolean getEsObligatorio() {
		return esObligatorio;
	}

	public void setEsObligatorio(Boolean esObligatorio) {
		this.esObligatorio = esObligatorio;
	}

	public Ponderacion getPonderacion() {
		return ponderacion;
	}

	public void setPonderacion(Ponderacion ponderacion) {
		this.ponderacion = ponderacion;
		if (ponderacion != null) {
			ponderacion.setDetallePerfil(this);
		}
	}

	public GrupoPerfil getGrupoPerfil() {
		return GrupoPerfil.fromId(grupoPerfilId);
	}

	public void setGrupoPerfil(GrupoPerfil grupoPerfil) {
		if (grupoPerfil != null) {
			this.grupoPerfilId = grupoPerfil.getId();
		} else {
			this.grupoPerfilId = null;
		}
	}

	@Override
	public boolean equals(Object obj) {
		DetallePerfil detalleEvaluado = (DetallePerfil)obj;
		return this.id.equals(detalleEvaluado.getId());
	}
	
}
